package ru.compft.web.security.event;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;

/**
 * User: VVasiliev
 * Date: 04.06.12
 * Time: 16:09
 * Слушатель фаз для страницы login.jsf
 * Позволяет редиректить на другую страницу, при определенных условиях.
 * В частности если пользователь авторизован, не показывать ему страницу входа в систему,
 * а перенаправлять на главную.
 * todo не надо это делать, т.к. если у пользователя нет прав доступа к содержимому, то ему придется выходить их приложения, чтоб залогиниться
 */
public class LoggedInCheck implements PhaseListener {
    private static final long serialVersionUID = 2407971236422276212L;

    private static final Logger logger = LoggerFactory.getLogger(LoggedInCheck.class);

    /**
     * После вызова страницы
     *
     * @param phaseEvent
     */
    @Override
    public void afterPhase(PhaseEvent phaseEvent) {
//        final FacesContext fc = phaseEvent.getFacesContext();
//        final String viewId = fc.getViewRoot().getViewId();

//        final Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
//        if (authentication != null && authentication.isAuthenticated()) {
//            try {
//                FacesUtils.dispatchToUrl("/main/index.jsf");
//            } catch (IOException e) {
//                if (logger.isWarnEnabled()) {
//                    logger.warn("How to check this exception? I do nothing.", e);
//                }
//            } catch (ServletException e) {
//                if (logger.isWarnEnabled()) {
//                    logger.warn("How to check this exception? I do nothing.", e);
//                }
//            }
////            NavigationHandler nh = fc.getApplication().getNavigationHandler();
////            nh.handleNavigation(fc, null, "gotoMain");
////        }
//        }
    }

    /**
     * Перед вызовом страницы, уходим на главную, если пользователь уже аутентифицирован.
     * todo сделать проверку на анонимного пользователя и редирект на Главную
     *
     * @param phaseEvent
     */
    @Override
    public void beforePhase(PhaseEvent phaseEvent) {
//        final Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
//        if (authentication != null && authentication.isAuthenticated()) {
//            try {
//                 FacesUtils.dispatchToUrl("/main/index.jsf");
//            } catch (IOException e) {
//                if (logger.isWarnEnabled()) {
//                    logger.warn("How to check this exception? I do nothing.", e);
//                }
//            } catch (ServletException e) {
//                if (logger.isWarnEnabled()) {
//                    logger.warn("How to check this exception? I do nothing.", e);
//                }
//            }
//        }
    }

    @Override
    public PhaseId getPhaseId() {
        return PhaseId.RENDER_RESPONSE;
    }

//    private boolean loggedIn() {
//        return getSessionWrapper().isLoggedInAgain();
//    }
}
